﻿using CapturePackage.Model;
using Newtonsoft.Json;

namespace CapturePackage
{
    internal class Program
    {
        static void Main(string[] args)
        {
            /// <summary>
            /// 1 爬虫&爬虫攻防
            /// 2 模拟请求下载html
            /// 3 xpath解析html，获取数据和深度抓取
            /// 4 不一样的属性和Ajax数据的获取
            /// 5 多线程爬虫
            /// 
            /// 爬虫：自动提取网页的程序
            /// 下载html--筛选数据--保存数据，继续下载
            /// 
            /// 能听见我说话的，能看到我桌面的，而且不卡的，打个1
            /// 今天不讲await/async，留到周四讲，因为需要跟作业一起讲，目前作业还没改完，这两天可以继续天龙八部
            /// 高级班的传统，准备好学习的小伙伴儿，给Eleven老师刷个专属字母E，然后课程就正式开始了！！！
            /// 
            /// 网络爬虫：是个应用程序，自动提取网页的程序，
            ///           通过数据筛选、过滤，得到有用的信息，一般是为搜索引擎服务或者作为内容来源
            ///           Application+WebRequest+Filter+Data+Threads
            /// 为什么要这个？
            ///     做个内容站--小说/电影/动漫---阿里云+爬虫+Web
            ///     数据搜集爬虫---招标数据爬虫/淘宝数据/招聘信息
            ///     竞品分析--抓取竞争对手数据
            /// 爬虫违法吗？
            ///     不问自取谓之偷；爬虫能拿到的信息都是浏览器能访问到的，就是公开数据；
            ///     不要基于盈利(小爬虫都没事儿)；360搜索引擎--被判赔偿--违背了robots
            ///     
            /// 爬虫攻防：
            /// robot协议(道德防线)：根域名/robots.txt   弱的约定
            /// ---服务端请求信息(urlrefer/agent){爬虫模拟好就能突破}
            /// ---用户登录{模拟请求带上cookie}
            /// ---IP黑名单白名单{代理请求}  
            /// ---识别爬虫后定期返回验证码{换IP/打码平台}
            /// ---js动态加载/动态修改/数据图片化{可以解决}  
            /// 爬虫：道高一尺魔高一丈，任何信息是无法阻止抓取的
            ///      
            /// Html下载----数据筛选清洗入库---多线程
            /// 
            /// 下载了一大堆的HTML，那么怎么去获取有用的信息呢？
            /// 怎么去进一步下载更多的东西呢？
            /// 
            /// 数据筛选：正则(麻烦)/indexof+substring+replace/第三方工具包HtmlAgilityPack支持Xpath(本质是正则)
            /// 安全控件--ActiveX
            /// 
            /// </summary>
            #region 测试抓取商品列表
            //{
            //    string testCategory = "{\"Id\":73,\"Code\":\"02f01s01T\",\"ParentCode\":\"02f01s\",\"Name\":\"烟机/灶具\",\"Url\":\"https://gitee.com/hu_ge_zhao/projects?sort=&scope=&state=\",\"Level\":3}";
            //    Category category = JsonConvert.DeserializeObject<Category>(testCategory);
            //    ISearch search = new CommoditySearch(category);
            //    search.Crawler();
            //}
            #endregion

            #region 抓取电商网站的商品信息（京东）
            {
                string testCategory = "{\"Id\":73,\"Code\":\"02f01s01T\",\"ParentCode\":\"02f01s\",\"Name\":\"烟机/灶具\",\"Url\":\"https://search.jd.com/Search?keyword=%E7%9C%BC%E9%95%9C&wq=%E7%9C%BC%E9%95%9C&pvid=4a7c60b665d44665a951befc74e975e7&isList=0&page=1&s=58&click=0&log_id=1725420019954.8660\",\"Level\":3}";
                Category category = JsonConvert.DeserializeObject<Category>(testCategory);
                ISearch search = new CommoditySearch(category);
                search.Crawler();
            }
            #endregion

            #region 抓取饿了么数据
            {
                //ISearch search = new CommoditySearch();
                //search.CrawlerElm();
            }
            #endregion
        }
    }
}
